// Modified or written by Object Mentor, Inc. for inclusion with FitNesse.
// Copyright (c) 2002 Cunningham & Cunningham, Inc.
// Released under the terms of the GNU General Public License version 2 or later.
package fit;

import junit.framework.TestCase;

public class FriendlyErrorTest extends TestCase {
	// Test the FitFailureException mechanism. If this works, then all of the
	// FitFailureException derivatives ought
	// to be working too.
	public void testCantFindFixture() throws Exception {
		String pageString = "<table><tr><td>NoSuchFixture</td></tr></table>";
		Parse page = new Parse(pageString);
		Fixture fixture = new Fixture();
		fixture.doTables(page);
		String fixtureName = page.at(0, 0, 0).body;
		assertTrue(fixtureName
				.indexOf("Could not find fixture: NoSuchFixture.") != -1);
	}

	public void testNoSuchMethod() throws Exception {
		final String[][] table = {
				{ "fitnesse.fixtures.ColumnFixtureTestFixture" },
				{ "no such method?" } };
		Parse page = FixtureTest.executeFixture(table);
		String columnHeader = page.at(0, 1, 0).body;
		assertTrue(columnHeader
				.indexOf("Could not find method: no such method?.") != -1);
	}

	public void testParseFailure() throws Exception {
		final String[][] table = {
				{ "fitnesse.fixtures.ColumnFixtureTestFixture" },
				{ "input", "output?" }, { "1", "alpha" } };
		Parse page = FixtureTest.executeFixture(table);
		String colTwoResult = page.at(0, 2, 1).body;
		assertTrue(colTwoResult
				.indexOf("Could not parse: alpha, expected type: int") != -1);
	}

	public void testExceptionInMethod() throws Exception {
		final String[][] table = {
				{ "fitnesse.fixtures.ColumnFixtureTestFixture" },
				{ "input", "exception?" }, { "1", "true" } };
		Parse page = FixtureTest.executeFixture(table);
		String colTwoResult = page.at(0, 2, 1).body;
		assertTrue(colTwoResult.indexOf("I thowed up") != -1);
	}
}
